package com.cy.pj.arithmetic;

import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.validation.constraints.Pattern;

@RestController//ResponseBody+Controller
@Validated
public class ArithmeticController {
    @RequestMapping("/doCompute1/{n1}/{n2}")
    public String doCompute1(@PathVariable Integer n1,@PathVariable Integer n2){
        try {
            Integer result=n1/n2;
            return "result is "+result;
        }catch (Exception e){
            return "do arithmetic error,cause by "+e.getMessage();
        }
    }
    @RequestMapping("/doCompute2/{n1}/{n2}")
    public String doCompute2(@PathVariable Integer n1,@PathVariable @Pattern(regexp = "^[0-9][1-9]*$",message = "不合法") String n2){
//            if(n2==0) throw new IllegalArgumentException("除数不能为0");
            Integer result=n1/Integer.valueOf(n2);
            //出现异常会找自定义的异常处理方法 本类中 > 父类中 > 全局异常处理类
            return "result is "+result;
    }

    /**
     * @ExceptionHandler 描述的方法为控制逻辑层异常处理方法
     * 此注解内定义的异常类型为异常处理方法可以处理的异常类型
     * 其中方法参数中的异常类型应大于等于注解中定义的异常类型(建议一致)
     * @param a 为异常处理方法捕获到的异常对象
     * 此异常处理方法可以处理这个方法所在类的所有算数异常
     */
//    @ExceptionHandler(ArithmeticException.class)
//    public String doHandleArithmeticException(ArithmeticException a){
//
//        return "do compute error,cause by "+a.getMessage();
//    }
}
